"use strict";
/*
 * @Author: quit
 * @Date: 2023-03-08 23:52:45
 * @LastEditTime: 2023-03-09 14:28:51
 * @Descripttion: 函数及其定义
 * @notice:
 */
Object.defineProperty(exports, "__esModule", { value: true });
/**
 * @description: 函数的定义的方式
 * 1. 函数声明
 * 2. 函数表达式
 * 一个函数有输入和输出,要在TS中对其进行约束,需要给函数的参数和返回值都设置一个类型
 *
 */
// function add(x, y) {
//     return x + y;
// }
// let _add = function (x, y) {
//     return x + y;
// };
// console.log(add(1, '2'), _add(true, 3));
function add(x, y) {
    return x + y;
}
let _add = function (x, y) {
    return x + y;
};
// console.log(add(1, '2'), _add(true, 3));
// console.log(add(1, 2), _add(1, 3));
// 自定义一个函数类型,这里的 => 并不是ES6中的箭头函数,这里的是TS种的函数定义
let add2;
let add3 = add;
// 正常使用TS时会使用接口来定义函数的样子,避免我们在函数的定义时代码过于臃肿,简洁代码
/**
 * @description: 剩余参数
 * 把所有参数收集到一个变量里;可以使用 ... 拓展运算符,将传入参数序列转换为数组
 * ...变量名(参数名)
 */
function getBall(x, ...args) {
    console.log(args);
    return x + '-' + args.join('-');
}
console.log(getBall('basketball', 'football', 'baseball'));
// 上面的为函数的重载;下面的为函数的实现
function add4(x, y) {
    if (typeof x === 'number' && typeof y === 'number') {
        return x + y;
    }
    else if (typeof x === 'string' && typeof y === 'string') {
        return x + y;
    }
}
let v1 = add4(1, 2);
let v2 = add4('1', '2');
